package com.abyss.transformation;


import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.operators.DataSource;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.api.java.tuple.Tuple3;
/**
 * min 和 minBy
 * max 和 maxBy
 * 的区别演示
 */
public class MinVSMinByDemo {
    public static void main(String[] args) throws Exception {
        ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

        DataSource<Tuple2<Integer, Integer>> source = env.fromElements(
                Tuple2.of(3, 2),
                Tuple2.of(1, 2),
                Tuple2.of(2, 3),
                Tuple2.of(111, 1),
                Tuple2.of(1, 1),
                Tuple2.of(3, 1),
                Tuple2.of(0, 1),
                Tuple2.of(33, 2)
        );

        source.min(1).print();  // 结果 33,1   可以看出 1取的是最小值, 33 取的是最后一个
        source.minBy(1).print();   // 结果是111,1 可以看出 当遇到最小值后, 就不会变了

        /*
         * min 会取最小值记录下来, 其它字段按照顺序填充, 最终将最后一个元素的其它字段和最小值组合形成结果返回
         * minBy 会判断最小值, 将第一个出现的最小值所在的那一行的结果保留, 最终返回出去
         * max maxBy同理
         */
    }
}
